const utils = {
    isEmptyObj(obj) {
        var obj = {};
        var b = function () {
            for (var key in obj) {
                return false;
            }
            return true;
        };
    },
    isChildArr(fatherArr, childArr) {
        console.log(1111)
        return childArr.every((v) => fatherArr.includes(v));
    },
    isEquals(arr1, arr2) {
        return arr1.length === arr2.length && arr1.every((ele) => arr2.includes(ele));
    },
    crossJoinAlgorithm(arr) {
        if (arr.length === 0) {
            return [[]];
        }
        const result = [];
        const rest = this.crossJoinAlgorithm(arr.slice(1));
        for (let i = 0; i < arr[0].length; i++) {
            for (let j = 0; j < rest.length; j++) {
                result.push([arr[0][i], ...rest[j]]);
            }
        }
        return result;
    },
    powerSet(originalSet) {
        const subSets = []

        // We will have 2^n possible combinations (where n is a length of original set).
        // It is because for every element of original set we will decide whether to include
        // it or not (2 options for each set element).
        const numberOfCombinations = 2 ** originalSet.length

        // Each number in binary representation in a range from 0 to 2^n does exactly what we need:
        // it shows by its bits (0 or 1) whether to include related element from the set or not.
        // For example, for the set {1, 2, 3} the binary number of 0b010 would mean that we need to
        // include only "2" to the current set.
        for (let combinationIndex = 0; combinationIndex < numberOfCombinations; combinationIndex += 1) {
            const subSet = []

            for (let setElementIndex = 0; setElementIndex < originalSet.length; setElementIndex += 1) {
                // Decide whether we need to include current element into the subset or not.
                if (combinationIndex & (1 << setElementIndex)) {
                    subSet.push(originalSet[setElementIndex])
                }
            }

            // Add current subset to the list of all subsets.
            subSets.push(subSet)
        }

        return subSets
    }
}

export default utils;